Input-Output 读写的基础原理
Read 和 Write
用户程序在进行 IO 读写时依赖于操作系统底层的 IO 读写,也就是 read 和 write 两大系统的调用。
对于调用操作系统的 read,是把数据从内核缓冲区复制到用户缓冲区的操作;而 write 则是把数据从用户缓冲区复制到内核缓冲区的操作。
Read 和 write 两大系统的调用都不会负责数据在内核缓冲区和物理设备对的交换,这种底层的读写交换都是由操作系统内核(Kernel)完成的。
内存缓冲区
缓冲区的目的是为了减少频繁地和设备之间的物理交换,以及用于在进程与内核之间传递数据和信息的存储单元,以实现高效的数据传输处理。在发生系统中断( 让硬件在需要的时候向内核发出信号(变内核主动为硬件主动))时,需要保存中断之前的进程数据和状态等信息,而在结束中断之后还需要回复之前保存的进程数据和状态信息。为了减少这种底层系统的时间损耗和性能损耗,于是内存缓冲区就诞生了。底层的操作会对内核缓冲区进行监控,当缓冲区达到一定数量时再进行 IO 设备的中断处理。至于什么时候中断(读、写中断)由操作系统的内核来决定,用户程序可以通过轮询或者阻塞等方式获知 IO 操作的结果,按时用户程序没有决定中断的权利,中断的触发和决定都是由内核完成的
IO 的读写操作大多并没有进行实际的 IO 操作,而是在进程缓冲区和内核缓冲区之间进行数据交换
Netty、Redis、Zookeeper高并发实战#2.1 IO读写的基础原理
Socket 的通信
是由操作系统通过网卡获取到所有 socket 分组后被复制到内核缓冲区。这个由操作系统自动完成。
Netty、Redis、Zookeeper高并发实战#^506504175-7GVyeTgpd